﻿/*
描述 : WEB桌面
版本 : 0.0.0

界面:
1.上面有切换各组应用的分组栏;
2.左侧是登录者(用户)管理栏;
3.下面是窗口的任务栏;
4.可以放置应用的快捷界面, 如: 时钟、天气;
5.窗口可以随意修改大小, 并可以隐藏到任务栏或者最大化;
6.最大化时, 双击最大化, 不进入管理栏范围; 三连击最大化遮盖管理栏;
7.应用图标可以拖动, 且可以拖挪到其他分组, 拖入时所有分组在小范围区域打开, 显示小图标; 
8.分组栏第一组, 显示所有可以使用的应用;
*/



(function(window) { //这样可以使部件程序中的变量私有化，防止与外部脚本代码冲突;
	var MODAL_DIALOG	= 0x00,
		PROMPT_DIALOG	= 0x01,
		WARNING_DIALOG	= 0x02,
		CONFIRM_DIALOG	= 0x03,
		WINDOW_DIALOG	= 0x04,
		FRAME_DIALOG	= 0x05,

		DIALOG_HTML		= [
						'/templates/dialog_modal.html',
						'/templates/dialog_promtp.html',
						'/templates/dialog_warning.html',
						'/templates/dialog_confirm.html',
						'/templates/dialog_window.html',
						'/templates/dialog_frame.html',
		],
		ICON_LIST = '/images/icons.gif',
		SHTCUT_HTML = '/templates/icon.html';

	if(!window.jQuery) {
		alert('jQuery not found, throw a lot of error messages');
		return false;
	}

	var $ = window.jQuery,
		document = window.document;

	var Deskweb = (function() {
		//在预执行函数中再次创建相同的对象，这样可以让对象直接创建新的对象实例；
		var Deskweb = function() {
			return new Deskweb.fn.__init__(); //返回init()对象实例，init的prototype=本身的prototype
		};


		//桌面界面对象，用以实现所有功能和对象
		Deskweb.fn = Deskweb.prototype = {
			online_display: true, //是否登录后才可以使用或显示
			__init__: function() {
				//根据模板的设计获取模板样式和HTML代码
				SHTCUT_HTML = '<div><a href="#" title="">应用名称</a></div>'; //??? ajax获取并整理
				DIALOG_HTML[0] = '<div>' + 
								'  <div>' + 
								'    <span class="right">关闭</span>' + 
								'    <span class="right">最大化</span>' + 
								'    <span class="right">最小化</span>' + 
								'    <span class="left">应用小图标</span>' + 
								'    <span class="left">窗口名称</span>' + 
								'  </div>' + 
								'  <div id="deskweb-contents">' + 
								'  </div>' + 
								'</div>';

				if (this.online_display && !this.is_online()) {
					return this;
				}
				//绘画桌面的各个单元(左侧用户工具栏,上面的应用分组,下面的应用任务栏)等；与用户无关的单元；
				this.draw();
				//获取当前用户的应用列表,并创建对话框对象,保存到缓存
				this.get_user_config();

				return this;
			},
			cache: {'dialog':{}, 'message':{}}, //用于动态缓存对话框对象
			createDialog: function(id, options) { //创建应用对象
				var dialog = Dialog(WINDOW_DIALOG, id, options);
				this.cache['dialog'][id] = dialog;
				return dialog;
			},
			is_online: function() { //验证是否已经登录
				//遮盖所有界面

				var is_online = false;
				$.ajax({
					url: '',
					sucessfull: function() {
					}
				});

				//如果没有登录,创建登录对话框
				if(!is_online) {
					var dialog = Dialog(MODAL_DIALOG, -999, {'depict':'登录', 'url':'/script/lib/templates/login.html'}).open();
				}
				return is_online;
			},
			show_login: function() { //显示登录对话框
				var dialog = Dialog(MODAL_DIALOG, -999, {'depict':'登录', 'url':'/script/lib/templates/login.html'}).open();
			},
			draw: function() { //绘画桌面的各个单元(左侧用户工具栏,上面的应用分组,下面的应用任务栏)等；与用户无关的单元；
			},
			get_user_config: function() { //获取当前用户的应用列表,并创建对话框对象,保存到缓存
				this.createDialog(1, {'depict':'百度搜索', 'url':'http://www.baidu.com/'});
			},
			zhegai: function() { //遮盖界面
			},
			status: 200
		};

		Deskweb.fn.__init__.prototype = Deskweb.fn;

		Deskweb.extend = function() { //??? 好像没什么用处
			alert('extend');
		};

		return Deskweb;
	})();

	var Dialog = (function() { //对话框对象; 可以是模态/提示/警告/确认/窗口对话框;
		Dialog = function(style, id, options) {
			return new Dialog.fn.__init__(style, id, options);
		};
		Dialog.fn = Dialog.prototype = {
			__init__: function(style, id, options) { //初始化(创建); 应用编号, 对话框类型, 应用名称, 应用描述, 显示url内容(仅针对窗口)
				this.id = id;
				for(opt in options) {
					this.options[opt] = options[opt];
				}

				this.window = $(DIALOG_HTML[style]); //应用的窗口jQuery对象
				this.shtcut = $(SHTCUT_HTML); //应用的快捷图标jQuery对象

				return this;
			},
			options: {
				'depict' : '',
				'url' : '',
				'width' : 500,
				'height' : 300,
				'x' : 200,
				'y' : 150,
				'description' : ''
			},
			//归属分组栏位; 由分组栏对象出发, 绑定到分组栏对象上;
			load: function() { //加载页面
				var self = this;
				var url = self.options['url'];
				if(url == '/index.html') {
					alert('这么做会死的。');
				}
				$.get(url, {}, function(html) { //??? 怎么获取ajax过程中的进度
					try {
						self.window.find('#deskweb-contents').html(html);
					} catch(e) {
						alert('错误的URL ' + url);
					}
				});
			},
			open: function() { //打开对话框
				$(document.body).append(this.window);
				this.load();

				return this;
			},
			close: function() { //关闭
				$(document.body).remove(this.window);
			},
			move: function() { //移动
			},
			resize: function() { //改变尺寸
			},
			hide: function() { //最小化到任务栏
				$(document.body).remove(this.window);
				//在任务栏上显示对话框信息
			},
			resizeMAX: function() { //最大化
			},
			form2ajax: function() { //改变对话中里的form标签为AJAX形势提交
			},
			zhegai: function() { //遮盖对话框内容
				var c = this.window.find('#deskweb-contents');
				h = c.height();
				w = c.width();
			},
			status: []
		};

		Dialog.fn.__init__.prototype = Dialog.fn;

		return Dialog;
	})();

	//window.Deskweb = window._ = Deskweb;

	$(document).ready(function() {
		window.Deskweb = window.$d = new Deskweb();
	});
})(window);
